<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>栈应用-十进制转二进制</title>
</head>

<body>
  <script>
    // 封装栈类
    function Stack() {
      // 栈中的属性
      this.items = []

      // 栈的相关操作
      // 1.将元素压入栈
      Stack.prototype.push = function (element) {
        this.items.push(element)
      }
      // 2.从栈中取出元素
      Stack.prototype.pop = function () {
        return this.items.pop()
      }
      // 3.查看一下栈顶元素
      Stack.prototype.peek = function () {
        return this.items[this.items.length - 1]
      }
      // 4.判断栈是否为空
      Stack.prototype.isEmpty = function () {
        return this.items.length == 0
      }
      // 5.获取栈中元素个数
      Stack.prototype.size = function () {
        return this.items.length
      }
      // 6.toString方法
      Stack.prototype.toString = function () {
        // 20 10 12 8 7
        let resultString = ''
        for (i = 0; i < this.items.length; i++) {
          resultString += this.items[i] + ' '
        }
        return resultString
      }

    }

    // 函数:十进制转二进制
    function decToBin(decNumber) {
      // 1.定义栈对象
      const stack = new Stack()

      // 2.循环操作
      while (decNumber > 0) {
        // 2.1获取余数,并且压入栈中
        stack.push(decNumber % 2)

        // 2.2获取整除后的结果,作为下一次运行的数字
        decNumber = Math.floor(decNumber / 2)

      }

      // 3.从栈中取出0和1
      let binaryString = ''
      while (!stack.isEmpty()) {
        binaryString += stack.pop()
      }
      return binaryString
    }

    console.log(decToBin(10));
  </script>
</body>

</html>